package com.palominocia.capa_datos_nodoCentral.dbPostgreSQL.schema1.modelo.seguridad;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.EntityManager;
import javax.persistence.Enumerated;
import javax.persistence.ManyToOne;
import javax.persistence.PersistenceContext;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.jpa.activerecord.RooJpaActiveRecord;
import org.springframework.roo.addon.tostring.RooToString;

import com.palominocia.capa_datos_nodoCentral.dbPostgreSQL.schema1.modelo.opciones.Habilitacion;

@RooJavaBean
@RooToString
@RooJpaActiveRecord
public class TokenPasswordUsuario {
	@PersistenceContext(unitName = "persistenceUnit")
	transient EntityManager entityManager;
	/**
     */
	@ManyToOne
	private Usuario usuarioToken;

	/**
     */
	@NotNull
	@Column(name = "CODIGO_TOKEN", unique = true)
	private String codigoToken;

	/**
     */
	@NotNull
	@Temporal(TemporalType.TIMESTAMP)
	@DateTimeFormat(style = "M-")
	private Date fechaGeneracion;

	/**
     */
	@Temporal(TemporalType.TIMESTAMP)
	@DateTimeFormat(style = "M-")
	private Date fechaExpiracion;

	/**
     */
	@Enumerated
	private Habilitacion estadoToken;

	@Transient
	public static TokenPasswordUsuario findbyToken(String token) {
		return entityManager()
				.createQuery(
						"SELECT o FROM TokenPasswordUsuario o WHERE o.codigoToken =:codigoToken ",
						TokenPasswordUsuario.class)
				.setParameter("codigoToken", token).getSingleResult();
	}

	@Transient
	public static List<TokenPasswordUsuario> findAllUsuarios(
			Usuario user_actual, Habilitacion habilitado) {
		return entityManager()
				.createQuery(
						"SELECT o FROM TokenPasswordUsuario o WHERE o.usuarioToken =:usuarioToken AND o.estadoToken=:estadoToken",
						TokenPasswordUsuario.class)
				.setParameter("usuarioToken", user_actual)
				.setParameter("estadoToken", habilitado).getResultList();

	}
}
